package com.log.enhance.core.service;

import lombok.extern.slf4j.Slf4j;

import java.util.Optional;

/**
 * @author Mr_wenpan@163.com
 */
@Slf4j
public abstract class FilterResultService<T, U> {


    /**
     * 是否需要过滤
     *
     * @param u u
     * @return boolean
     * @author Mr_wenpan@163.com 2021/8/1 10:57 下午
     */
    public abstract boolean shouldFilter(U u);

    public Optional<T> filterResult(U u) {
        if (shouldFilter(u)) {
            log.info("Start dealing with the results");
            return Optional.ofNullable(filter(u));
        }
        return Optional.empty();
    }

    /**
     * 过滤方法
     *
     * @param u 参数
     * @return T 返回类型
     * @author Mr_wenpan@163.com 2021/8/1 10:59 下午
     */
    public abstract T filter(U u);
}
